/**
 * 视角跟随
 *
 */


const {ccclass, property} = cc._decorator;

@ccclass
export default class CameraFollow extends cc.Component {

    // 跟随的目标 player
    @property(cc.Node)
    target: cc.Node = null;

    // 大地图 用于计算边缘
    @property(cc.TiledMap)
    tieldMap: cc.TiledMap = null;

    @property(cc.Node)
    menuNode: cc.Node = null;

    half_ui_width: number = 0;
    half_ui_height: number = 0;

    onLoad() {
    }

    start() {
        let ui_width = cc.find("UI_ROOT").width;
        let ui_height = cc.find("UI_ROOT").height;
        let map_width = this.tieldMap.node.width;
        let map_height = this.tieldMap.node.height;

        let max_x = map_width - ui_width;
        let max_y = map_height - ui_height;

        this.half_ui_width = max_x / 2;
        this.half_ui_height = max_y / 2;

    }

    update(dt) {
        if (!this.target) return;

        // 将节点坐标系下的一个点转换到世界空间坐标系
        let w_pos = this.target.convertToWorldSpaceAR(cc.v2(0, 0));
        // 将一个点转换到节点 (局部) 空间坐标系
        let c_pos = this.node.parent.convertToNodeSpaceAR(w_pos);

        // 距离边缘 半个 camera/ui 就需要停下，因为人物在正中间
        if (c_pos.x > 0 - this.half_ui_width && c_pos.x < this.half_ui_width) {
            this.node.x = c_pos.x;
            this.menuNode.x = c_pos.x;
        }
        if (c_pos.y > 0 - this.half_ui_height && c_pos.y < this.half_ui_height) {
            this.node.y = c_pos.y;
            this.menuNode.y = c_pos.y;
        }
        // 移动相机位置

        // 除了摄像机动之外，还有所有的操作按钮、人物状态展示的东西需要动
        // this.ctrl.x = c_pos.x;
    }
}
